{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Sebastian Raschka   \n",
    "last updated: 02/07/2017  \n",
    "\n",
    "- Link to the containing GitHub Repository: [https://github.com/rasbt/pattern_classification](https://github.com/rasbt/pattern_classification)\n",
    "- Link to this IPython Notebook on GitHub: [principal_component_analysis.ipynb](\"https://github.com/rasbt/pattern_classification/blob/master/dimensionality_reduction/projection/principal_component_analysis.ipynb\")  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr>\n",
    "# Stepping through a Principal Component Analysis\n",
    "# - using Python's numpy and matplotlib\n",
    "<hr>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Sections\n",
    "\n",
    "- <a href=\"#introduction\">Introduction</a>  \n",
    "- <a href=\"#sample_data\">Generating 3-dimensional sample data</a>\n",
    "- <a href=\"#gen_data\">The step by step approach</a>\n",
    "    - 1.&nbsp;<a href=\"#drop_labels\">Taking the whole dataset ignoring the class labels</a>  \n",
    "    - 2.&nbsp;<a href=\"#mean_vec\">Compute the $d$-dimensional mean vector</a>\n",
    "    - 3.&nbsp;<a href=\"#comp_scatter\">Computing the scatter matrix (alternatively, the covariance matrix)</a>\n",
    "    - 4.&nbsp;<a href=\"#eig_vec\">Computing eigenvectors and corresponding eigenvalues</a>\n",
    "    - 5.&nbsp;<a href=\"#sort_eig\">Ranking and choosing $k$ eigenvectors</a>\n",
    "    - 6.&nbsp;<a href=\"#transform\">Transforming the samples onto the new subspace</a>\n",
    "- <a href=\"#mat_pca\">Using the `PCA()` class from the `matplotlib.mlab` library</a>\n",
    "    - &nbsp;<a href=\"#diff_mat_pca\">Differences between the step by step approach and matplotlib.mlab.PCA()</a>\n",
    "- <a href=\"#sklearn_pca\">Using the `PCA()` class from the sklearn.decomposition library to confirm our results</a>    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<a name=\"introduction\"></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# Introduction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The main purposes of a principal component analysis are the analysis of data to identify patterns and finding patterns to reduce the dimensions of the dataset with minimal loss of information.\n",
    "\n",
    "Here, our desired outcome of the principal component analysis is to project a feature space (our dataset consisting of $n$ $d$-dimensional samples) onto a smaller subspace that represents our data \"well\". A possible application would be a pattern classification task, where we want to reduce the computational costs and the error of parameter estimation by reducing the number of dimensions of our feature space by extracting a subspace that describes our data \"best\".\n",
    "\n",
    "### Principal Component Analysis (PCA) Vs. Multiple Discriminant Analysis (MDA)\n",
    "\n",
    "Both Multiple Discriminant Analysis (MDA) and Principal Component Analysis (PCA) are linear transformation methods and closely related to each other. In PCA, we are interested to find the directions (components) that maximize the variance in our dataset, where in MDA, we are additionally interested to find the directions that maximize the separation (or discrimination) between different classes (for example, in pattern classification problems where our dataset consists of multiple classes. In contrast two PCA, which ignores the class labels).  \n",
    "***In other words, via PCA, we are projecting the entire set of data (without class labels) onto a different subspace, and in MDA, we are trying to determine a suitable subspace to distinguish between patterns that belong to different classes. Or, roughly speaking in PCA we are trying to find the axes with maximum variances where the data is most spread (within a class, since PCA treats the whole data set as one class), and in MDA we are additionally maximizing the spread between classes. ***  \n",
    "In typical pattern recognition problems, a PCA is often followed by an MDA.\n",
    "\n",
    "#### What is a \"good\" subspace?\n",
    "Let's assume that our goal is to reduce the dimensions of a $d$-dimensional dataset by projecting it onto a $(k)$-dimensional subspace (where $k\\;<\\;d$). \n",
    "So, how do we know what size we should choose for $k$, and how do we know if we have a feature space that represents our data \"well\"?  \n",
    "Later, we will compute eigenvectors (the components) from our data set and collect them in a so-called scatter-matrix (or alternatively calculate them from the covariance matrix). Each of those eigenvectors is associated with an eigenvalue, which tell us about the \"length\" or \"magnitude\" of the eigenvectors. If we observe that all the eigenvalues are of very similar magnitude, this is a good indicator that our data is already in a \"good\" subspace. Or if some of the eigenvalues are much much higher than others, we might be interested in keeping only those eigenvectors with the much larger eigenvalues, since they contain more information about our data distribution. Vice versa, eigenvalues that are close to 0 are less informative and we might consider in dropping those when we construct the new feature subspace."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Summarizing the PCA approach\n",
    "\n",
    "Listed below are the 6 general steps for performing a principal component analysis, which we will investigate in the following sections.\n",
    "\n",
    "1. <a href=\"#drop_labels\"> Take the whole dataset consisting of $d$-dimensional samples ignoring the class labels</a>  \n",
    "2. <a href=\"#mean_vec\"> Compute the $d$-dimensional mean vector</a> (i.e., the means for every dimension of the whole dataset)\n",
    "3. <a href=\"#sc_matrix\">Compute the scatter matrix (alternatively, the covariance matrix) of the whole data set</a>\n",
    "4. <a href=\"#eig_vec\">Compute eigenvectors ($\\pmb e_1, \\; \\pmb e_2, \\; ..., \\; \\pmb e_d $) and corresponding eigenvalues ($\\pmb \\lambda_1, \\; \\pmb \\lambda_2, \\; ..., \\; \\pmb \\lambda_d$)</a>\n",
    "5. <a href=\"#sort_eig\">Sort the eigenvectors by decreasing eigenvalues and choose $k$ eigenvectors with the largest eigenvalues to form a $d \\times k $ dimensional matrix $\\pmb W\\;$</a>(where every column represents an eigenvector)\n",
    "6. <a href=\"#transform\">Use this $d \\times k $ eigenvector matrix to transform the samples onto the new subspace.</a> This can be summarized by the mathematical equation: $\\pmb y = \\pmb W^T \\times \\pmb x$ (where $\\pmb x$ is a $d \\times 1$-dimensional vector representing one sample, and $\\pmb y$ is the transformed $k \\times 1$-dimensional sample in the new subspace.)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name=\"sample_data\"></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# Generating some 3-dimensional sample data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For the following example, we will generate 40 3-dimensional samples randomly drawn from a multivariate Gaussian distribution.   \n",
    "Here, we will assume that the samples stem from two different classes, where one half (i.e., 20) samples of our data set are labeled $\\omega_1$ (class 1) and the other half $\\omega_2$ (class 2).  \n",
    "\n",
    "$\\pmb{\\mu_1} = $\n",
    "$\\begin{bmatrix}0\\\\0\\\\0\\end{bmatrix}$ \n",
    "$\\quad\\pmb{\\mu_2} = $ \n",
    "$\\begin{bmatrix}1\\\\1\\\\1\\end{bmatrix}\\quad$(sample means)\n",
    "\n",
    "$\\pmb{\\Sigma_1} = $\n",
    "$\\begin{bmatrix}1\\quad 0\\quad 0\\\\0\\quad 1\\quad0\\\\0\\quad0\\quad1\\end{bmatrix}$\n",
    "$\\quad\\pmb{\\Sigma_2} = $\n",
    "$\\begin{bmatrix}1\\quad 0\\quad 0\\\\0\\quad 1\\quad0\\\\0\\quad0\\quad1\\end{bmatrix}\\quad$ (covariance matrices)\n",
    "\n",
    "### Why are we chosing a 3-dimensional sample?\n",
    "The problem of multi-dimensional data is its visualization, which would make it quite tough to follow our example principal component analysis (at least visually). We could also choose a 2-dimensional sample data set for the following examples, but since the goal of the PCA in an \"Diminsionality Reduction\" application is to drop at least one of the dimensions, I find it more intuitive and visually appealing to start with a 3-dimensional dataset that we reduce to an 2-dimensional dataset by dropping 1 dimension.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "np.random.seed(0)\n",
    "\n",
    "mu_vec1 = np.array([0, 0, 0])\n",
    "cov_mat1 = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n",
    "class1_sample = np.random.multivariate_normal(mu_vec1, cov_mat1, 20).T\n",
    "assert class1_sample.shape == (3, 20), \"The matrix has not the dimensions 3x20\"\n",
    "\n",
    "mu_vec2 = np.array([1, 1, 1])\n",
    "cov_mat2 = np.array([[1, 0, 0],[0, 1, 0], [0, 0, 1]])\n",
    "class2_sample = np.random.multivariate_normal(mu_vec2, cov_mat2, 20).T\n",
    "assert class2_sample.shape == (3, 20), \"The matrix has not the dimensions 3x20\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using the code above, we created two $3\\times20$ datasets - one dataset for each class $\\omega_1$ and $\\omega_2$ -  \n",
    "where each column can be pictured as a 3-dimensional vector $\\pmb x = \\begin{pmatrix} x_1 \\\\ x_2 \\\\ x_3 \\end{pmatrix}$ so that our dataset will have the form  \n",
    "$\\pmb X = \\begin{pmatrix} x_{1_1}\\; x_{1_2} \\; ... \\; x_{1_{20}}\\\\ x_{2_1} \\; x_{2_2} \\; ... \\; x_{2_{20}}\\\\ x_{3_1} \\; x_{3_2} \\; ... \\; x_{3_{20}}\\end{pmatrix}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Just to get a rough idea how the samples of our two classes $\\omega_1$ and $\\omega_2$ are distributed, let us plot them in a 3D scatter plot."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10fdbb828>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "from matplotlib import pyplot as plt\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "from mpl_toolkits.mplot3d import proj3d\n",
    "\n",
    "fig = plt.figure(figsize=(8, 8))\n",
    "ax = fig.add_subplot(111, projection='3d')\n",
    "plt.rcParams['legend.fontsize'] = 10   \n",
    "ax.plot(class1_sample[0, :], class1_sample[1, :], \n",
    "        class1_sample[2, :], 'o', markersize=8, \n",
    "        color='blue', alpha=0.5, label='class1')\n",
    "ax.plot(class2_sample[0, :], class2_sample[1, :], \n",
    "        class2_sample[2, :], '^', markersize=8, \n",
    "        alpha=0.5, color='red', label='class2')\n",
    "\n",
    "plt.title('Samples for class 1 and class 2')\n",
    "ax.legend(loc='upper right')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name='drop_labels'></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. Taking the whole dataset ignoring the class labels\n",
    "\n",
    "Because we don't need class labels for the PCA analysis, let us merge the samples for our 2 classes into one $3\\times40$-dimensional array."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "all_samples = np.concatenate((class1_sample, class2_sample), axis=1)\n",
    "assert all_samples.shape == (3, 40), \"The matrix has not the dimensions 3x40\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name='mean_vec'></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. Computing the d-dimensional mean vector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean Vector:\n",
      " [[ 0.69887368]\n",
      " [ 0.80019884]\n",
      " [ 0.39876272]]\n"
     ]
    }
   ],
   "source": [
    "mean_x = np.mean(all_samples[0, :])\n",
    "mean_y = np.mean(all_samples[1, :])\n",
    "mean_z = np.mean(all_samples[2, :])\n",
    "\n",
    "mean_vector = np.array([[mean_x],[mean_y],[mean_z]])\n",
    "\n",
    "print('Mean Vector:\\n', mean_vector)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name=\"comp_scatter\"></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# 3. a) Computing the Scatter Matrix"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The scatter matrix is computed by the following equation:  \n",
    "$S = \\sum\\limits_{k=1}^n (\\pmb x_k - \\pmb m)\\;(\\pmb x_k - \\pmb m)^T$  \n",
    "where $\\pmb m$ is the mean vector  \n",
    "$\\pmb m = \\frac{1}{n} \\sum\\limits_{k=1}^n \\; \\pmb x_k$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Scatter Matrix:\n",
      " [[ 54.75319714  12.1506419   20.98922466]\n",
      " [ 12.1506419   53.09745345  18.13107282]\n",
      " [ 20.98922466  18.13107282  56.45952312]]\n"
     ]
    }
   ],
   "source": [
    "scatter_matrix = np.zeros((3, 3))\n",
    "for i in range(all_samples.shape[1]):\n",
    "    scatter_matrix += (all_samples[:, i].reshape(3, 1)\\\n",
    "                       - mean_vector).dot((all_samples[:, i].reshape(3, 1)\n",
    "                                           - mean_vector).T)\n",
    "print('Scatter Matrix:\\n', scatter_matrix)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name=\"comp_cov\"></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#3. b) Computing the Covariance Matrix (alternatively to the scatter matrix)\n",
    "Alternatively, instead of calculating the scatter matrix, we could also calculate the covariance matrix using the in-built `numpy.cov()` function.  The equations for the covariance matrix and scatter matrix are very similar, the only difference is, that we use the scaling factor $\\frac{1}{N-1}$ (here: $\\frac{1}{40-1} = \\frac{1}{39}$) for the covariance matrix. Thus, their ***eigenspaces*** will be identical (identical eigenvectors, only the eigenvalues are scaled differently by a constant factor).\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$\\Sigma_i = \\Bigg[ \n",
    "\\begin{array}{cc}\n",
    "\\sigma_{11}^2 & \\sigma_{12}^2 & \\sigma_{13}^2\\\\\n",
    "\\sigma_{21}^2 & \\sigma_{22}^2 & \\sigma_{23}^2\\\\\n",
    "\\sigma_{31}^2 & \\sigma_{32}^2 & \\sigma_{33}^2\\\\\n",
    "\\end{array} \\Bigg]$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Covariance Matrix:\n",
      " [[ 1.40392813  0.31155492  0.53818525]\n",
      " [ 0.31155492  1.36147317  0.4648993 ]\n",
      " [ 0.53818525  0.4648993   1.44768008]]\n"
     ]
    }
   ],
   "source": [
    "cov_mat = np.cov([all_samples[0, :], \n",
    "                  all_samples[1, :], \n",
    "                  all_samples[2, :]])\n",
    "print('Covariance Matrix:\\n', cov_mat)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name=\"eig_vec\"></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. Computing eigenvectors and corresponding eigenvalues\n",
    "\n",
    "To show that the eigenvectors are indeed identical whether we derived them from the scatter or the covariance matrix, let us put an `assert` statement into the code. Also, we will see that the eigenvalues were indeed scaled by the factor 39 when we derived it from the scatter matrix."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Eigenvector 1: \n",
      "[[-0.5690384 ]\n",
      " [-0.51164745]\n",
      " [-0.64374854]]\n",
      "Eigenvalue 1 from scatter matrix: 89.42331351750258\n",
      "Eigenvalue 1 from covariance matrix: 2.2929054748077586\n",
      "Scaling factor:  39.0\n",
      "----------------------------------------\n",
      "Eigenvector 2: \n",
      "[[-0.62675178]\n",
      " [ 0.77664688]\n",
      " [-0.06326004]]\n",
      "Eigenvalue 2 from scatter matrix: 41.81509448386742\n",
      "Eigenvalue 2 from covariance matrix: 1.0721819098427552\n",
      "Scaling factor:  39.0\n",
      "----------------------------------------\n",
      "Eigenvector 3: \n",
      "[[-0.53233213]\n",
      " [-0.36747315]\n",
      " [ 0.76261785]]\n",
      "Eigenvalue 3 from scatter matrix: 33.07176570647168\n",
      "Eigenvalue 3 from covariance matrix: 0.8479939924736333\n",
      "Scaling factor:  39.0\n",
      "----------------------------------------\n"
     ]
    }
   ],
   "source": [
    "# eigenvectors and eigenvalues for the from the scatter matrix\n",
    "eig_val_sc, eig_vec_sc = np.linalg.eig(scatter_matrix)\n",
    "\n",
    "# eigenvectors and eigenvalues for the from the covariance matrix\n",
    "eig_val_cov, eig_vec_cov = np.linalg.eig(cov_mat)\n",
    "\n",
    "for i in range(len(eig_val_sc)):\n",
    "    eigvec_sc = eig_vec_sc[:, i].reshape(1, 3).T\n",
    "    eigvec_cov = eig_vec_cov[:,i].reshape(1, 3).T\n",
    "    assert eigvec_sc.all() == eigvec_cov.all(), 'Eigenvectors are not identical'\n",
    "    \n",
    "    print('Eigenvector {}: \\n{}'.format(i+1, eigvec_sc))\n",
    "    print('Eigenvalue {} from scatter matrix: {}'.format(i+1, eig_val_sc[i]))\n",
    "    print('Eigenvalue {} from covariance matrix: {}'.format(i+1, eig_val_cov[i]))\n",
    "    print('Scaling factor: ', eig_val_sc[i]/eig_val_cov[i])\n",
    "    print(40 * '-')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Checking the eigenvector-eigenvalue calculation\n",
    "\n",
    "Let us quickly check that the eigenvector-eigenvalue calculation is correct and satisfy the equation\n",
    "\n",
    "$\\pmb\\Sigma\\pmb{v} = \\lambda\\pmb{v}$  \n",
    "\n",
    "<br>\n",
    "where  \n",
    "$\\pmb\\Sigma = Covariance \\; matrix\\\\\n",
    "\\pmb{v} = \\; Eigenvector\\\\\n",
    "\\lambda = \\; Eigenvalue$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range(len(eig_val_sc)):\n",
    "    eigv = eig_vec_sc[:, i].reshape(1, 3).T\n",
    "    np.testing.assert_array_almost_equal(scatter_matrix.dot(eigv), eig_val_sc[i] * eigv, \n",
    "                                         decimal=6, err_msg='', verbose=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Visualizing the eigenvectors"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And before we move on to the next step, just to satisfy our own curiosity, we plot the eigenvectors centered at the sample mean."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZwAAAGRCAYAAABR3wXnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXmUJFWZ9/+N3PfMytq3rqqmet+7qwoEFJkDLoD+jjpu\nMKP+QISDMOicGUYHRcefgjPHXRxRHEQUcZnxxRFfEN/j4Iss3UDTXVVd3V1d+77mvmdG3N8fRURn\nZuUSkRmRGVV1P+f0Uaqybt6MzLzfuM/z3O/DEEJAoVAoFIrSaKo9AQqFQqFsDajgUCgUCqUiUMGh\nUCgUSkWggkOhUCiUikAFh0KhUCgVgQoOhUKhUCoCFRwKhUKhVAQqOBQKhUKpCFRwKBQKhVIRdBIf\nT20JKBQKhZIOI/aBdIdDoVAolIpABYdCoVAoFYEKDoVCoVAqAhUcCoVCoVQEKjgUCoVCqQhUcCgU\nCoVSEajgUCgUCqUiUMGhUCgUSkWggkOhUCiUikAFh0KhUCgVgQoOhUKhUCoCFRwKhUKhVAQqOBQK\nhUKpCFRwKBQKhVIRqOBQNiSPP/443va2t1V7GhQKRQJUcCiqprOzE2azGTabTfh355134qabbsKz\nzz5b7emVxKOPPoorr7yy2tOgUCqO1AZsFErF+d3vfodrrrmm2tNQDalUCjod/epSNh50h0PZkGTv\nEp599lns2rULTqcTd9xxB6666ir86Ec/En7/yCOPYM+ePaipqcHb3/52TE5OCr9jGAYPPfQQduzY\nAZfLhU9+8pMghCAej8PlcmFwcFB47PLyMsxmM5aWlgAATz31FA4fPgyXy4XLL78c/f39wmOnp6fx\n3ve+F/X19aitrcWdd96Js2fP4vbbb8dLL70Em80Gl8sFAPD7/fjIRz6C+vp6dHR04Mtf/jI4jhNe\n6xVXXIFPf/rTqK2txRe/+EWMjIzgqquugtPpRF1dHT74wQ8qc6EpFBmhgkPZ8KysrOCv//qv8cAD\nD2B1dRW7du3Ciy++KPz+t7/9Le6//3785je/wfLyMt785jfjwx/+cMYYTz31FF555RX09/fjV7/6\nFf7whz/AaDTive99L5544gnhcb/61a9w1VVXoaGhAa+//jpuvvlm/OAHP8Dq6ipuu+02vPvd70Y8\nHgfLsrjhhhvQ0dGBiYkJzM7O4kMf+hD27NmDhx56CG9605sQCoXg8/kAAHfddRf8fj/Gxsbw5z//\nGY899hh+/OMfC897/PhxbN++HYuLi7j33nvx+c9/Hm9729vg9XoxMzODu+66S+GrTKHIACFEyj8K\npaJ0dHQQq9VKnE6n8O+HP/wh+fGPf0yuuOIKQgghP/nJT8hll10m/A3HcaStrY08/PDDhBBC3vGO\nd5Af/ehHwu9ZliVms5lMTEwQQggBQJ5//nnh9+9///vJAw88QAgh5I9//CPZvn278LvLL7+c/OQn\nPyGEEHL77beTz33ucxnz3blzJ3nuuefIiy++SOrq6kgymVz3mtLnTgghqVSK6PV6cubMGeFnDz30\nELnqqquEx7e3t2eM8bd/+7fk1ltvJdPT08UuIYWiNKI1hO5wKKrnySefhM/nE/7deuutGb+fm5tD\ne3u78N8Mw6CtrU3478nJSdx9991wuVxwuVxwu90ghGB2dlZ4TFNTk/D/LRYLQqEQAODqq69GJBLB\n8ePHMTExgVOnTuE973mPMO7Xv/51YVyXy4Xp6WnMzc1henoaHR0donItKysrSCaT6OjoEH7W0dGR\nMb/01wcA//Zv/wZCCPr6+rBv3z488sgjRZ+HQqk2NPNI2fA0NzdjZmZG+G9CSMZ/t7e3495778VN\nN90keWytVosPfOADeOKJJ9DY2IgbbrgBdrs9Y9x777133d+99NJLmJqaypngZxgm47/r6uqg1+sx\nOTmJvXv3AgCmpqbQ2tqa92+amprw8MMPAwD+8pe/4JprrsFb3vIWdHd3S36NFEqloDscyobn+uuv\nx8DAAJ588kmkUil873vfw8LCgvD722+/HQ888ADOnDkDYC1B/+tf/1r0+DfeeCN++ctf4vHHH8eN\nN94o/PzWW2/FQw89hOPHj4MQgnA4jN///vcIBoPo6+tDc3MzPvOZzyAcDiMWi+GFF14AADQ2NmJm\nZgaJRALARVG79957EQwGMTk5iW984xv4m7/5m7xz+vWvfy2Iak1NDRiGgUZDv84UdUM/oRTV8653\nvSvjHM673/1usCwr/L6urg6//vWvcc8996C2thZDQ0Po6emB0WgEALznPe/BP/3TP+FDH/oQHA4H\n9u/fj6efflr081966aWwWq2Ym5vDO9/5TuHnPT09ePjhh3HnnXeipqYG3d3dePTRRwGsicjvfvc7\njIyMYNu2bWhra8Mvf/lLAMBf/dVfYd++fWhqakJdXR0A4Lvf/S6sViu2b9+OK6+8EjfeeCNuvvnm\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10ab7fa58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "from mpl_toolkits.mplot3d import proj3d\n",
    "from matplotlib.patches import FancyArrowPatch\n",
    "\n",
    "\n",
    "class Arrow3D(FancyArrowPatch):\n",
    "    def __init__(self, xs, ys, zs, *args, **kwargs):\n",
    "        FancyArrowPatch.__init__(self, (0, 0), (0, 0), *args, **kwargs)\n",
    "        self._verts3d = xs, ys, zs\n",
    "\n",
    "    def draw(self, renderer):\n",
    "        xs3d, ys3d, zs3d = self._verts3d\n",
    "        xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M)\n",
    "        self.set_positions((xs[0], ys[0]), (xs[1],ys[1]))\n",
    "        FancyArrowPatch.draw(self, renderer)\n",
    "\n",
    "fig = plt.figure(figsize=(7, 7))\n",
    "ax = fig.add_subplot(111, projection='3d')\n",
    "\n",
    "ax.plot(all_samples[0, :], all_samples[1, :], all_samples[2, :], \n",
    "        'o', markersize=8, color='green', alpha=0.2)\n",
    "ax.plot([mean_x], [mean_y], [mean_z], \n",
    "        'o', markersize=10, color='red', alpha=0.5)\n",
    "\n",
    "for v in eig_vec_sc.T:\n",
    "    a = Arrow3D([mean_x, v[0]], [mean_y, v[1]], \n",
    "                [mean_z, v[2]], mutation_scale=20, \n",
    "                lw=3, arrowstyle=\"-|>\", color=\"r\")\n",
    "    ax.add_artist(a)\n",
    "\n",
    "ax.set_xlabel('x_values')\n",
    "ax.set_ylabel('y_values')\n",
    "ax.set_zlabel('z_values')\n",
    "\n",
    "plt.title('Eigenvectors')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name=\"sort_eig\"></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a name=\"sort_eig\"></a>\n",
    "<br>\n",
    "<br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5.1. Sorting the eigenvectors by decreasing eigenvalues\n",
    "We started with the goal to reduce the dimensionality of our feature space, i.e., projecting the feature space via PCA onto a smaller subspace, where the eigenvectors will form the axes of this new feature subspace. However, the eigenvectors only define the directions of the new axis, since they have all the same unit length 1, which we can confirm by the following code:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "for ev in eig_vec_sc:\n",
    "    np.testing.assert_array_almost_equal(1.0, np.linalg.norm(ev))\n",
    "    # instead of 'assert' because of rounding errors"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So, in order to decide which eigenvector(s) we want to drop for our lower-dimensional subspace, we have to take a look at the corresponding eigenvalues of the eigenvectors. Roughly speaking, the eigenvectors with the lowest eigenvalues bear the least information about the distribution of the data, and those are the ones we want to drop.  \n",
    "The common approach is to rank the eigenvectors from highest to lowest corresponding eigenvalue and choose the top $k$ eigenvectors."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "89.4233135175\n",
      "41.8150944839\n",
      "33.0717657065\n"
     ]
    }
   ],
   "source": [
    "# Make a list of (eigenvalue, eigenvector) tuples\n",
    "eig_pairs = [(np.abs(eig_val_sc[i]), \n",
    "              eig_vec_sc[:, i]) for i in range(len(eig_val_sc))]\n",
    "\n",
    "# Sort the (eigenvalue, eigenvector) tuples from high to low\n",
    "eig_pairs.sort(key=lambda x: x[0], reverse=True)\n",
    "\n",
    "# Visually confirm that the list is correctly sorted by decreasing eigenvalues\n",
    "for i in eig_pairs:\n",
    "    print(i[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# 5.2. Choosing *k* eigenvectors with the largest eigenvalues\n",
    "For our simple example, where we are reducing a 3-dimensional feature space to a 2-dimensional feature subspace, we are combining the two eigenvectors with the highest eigenvalues to construct our $d \\times k$-dimensional eigenvector matrix $\\pmb W$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Matrix W:\n",
      " [[-0.5690384  -0.62675178]\n",
      " [-0.51164745  0.77664688]\n",
      " [-0.64374854 -0.06326004]]\n"
     ]
    }
   ],
   "source": [
    "matrix_w = np.hstack((eig_pairs[0][1].reshape(3, 1), \n",
    "                      eig_pairs[1][1].reshape(3, 1)))\n",
    "print('Matrix W:\\n', matrix_w)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name='transform'></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 6. Transforming the samples onto the new subspace\n",
    "In the last step, we use the $2 \\times 3$-dimensional matrix $\\pmb W$ that we just computed to transform our samples onto the new subspace via the equation  $\\pmb y = \\pmb W^T \\times \\pmb x$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "transformed = matrix_w.T.dot(all_samples)\n",
    "assert transformed.shape == (2, 40), \"The matrix is not 2x40 dimensional.\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110677a20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(transformed[0, 0:20], transformed[1, 0:20], \n",
    "         'o', markersize=7, color='blue', \n",
    "         alpha=0.5, label='class1')\n",
    "plt.plot(transformed[0, 20:40], transformed[1, 20:40], '^', \n",
    "         markersize=7, color='red', alpha=0.5, label='class2')\n",
    "\n",
    "plt.xlabel('x_values')\n",
    "plt.ylabel('y_values')\n",
    "plt.legend()\n",
    "plt.title('Transformed samples with class labels')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name=\"mat_pca\"></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# Using the PCA() class from the matplotlib.mlab library\n",
    "\n",
    "Now, that we have seen how a principal component analysis works, we can use the in-built `PCA()` class from the `matplotlib` library for our convenience in future applications.\n",
    "Unfortunately, the original documentation ([http://matplotlib.sourceforge.net/api/mlab_api.html#matplotlib.mlab.PCA](http://matplotlib.sourceforge.net/api/mlab_api.html#matplotlib.mlab.PCA)) is very sparse;  \n",
    "a better documentation can be found here: [https://www.clear.rice.edu/comp130/12spring/pca/pca_docs.shtml](https://www.clear.rice.edu/comp130/12spring/pca/pca_docs.shtml).  \n",
    "\n",
    "And the original code implementation of the `PCA()` class can be viewed at:  \n",
    "[https://sourcegraph.com/github.com/matplotlib/matplotlib/symbols/python/lib/matplotlib/mlab/PCA](https://sourcegraph.com/github.com/matplotlib/matplotlib/symbols/python/lib/matplotlib/mlab/PCA)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Class attributes of `PCA()`\n",
    "\n",
    "    Attrs:\n",
    "\n",
    "    a : a centered unit sigma version of input a\n",
    "\n",
    "    numrows, numcols: the dimensions of a\n",
    "\n",
    "    mu : a numdims array of means of a\n",
    "\n",
    "    sigma : a numdims array of atandard deviation of a\n",
    "\n",
    "    fracs : the proportion of variance of each of the principal components\n",
    "\n",
    "    Wt : the weight vector for projecting a numdims point or array into PCA space\n",
    "\n",
    "    Y : a projected into PCA space"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Also, it has to be mentioned that the `PCA()` class expects a `np.array()` as input where: `'we assume data in a is organized with numrows>numcols')`, so that we have to transpose our dataset.  \n",
    "\n",
    "`matplotlib.mlab.PCA()` keeps all $d$-dimensions of the input dataset after the transformation (stored in the class attribute `PCA.Y`), and assuming that they are already ordered (\"Since the PCA analysis orders the PC axes by descending importance in terms of describing the clustering, we see that fracs is a list of monotonically decreasing values.\", [https://www.clear.rice.edu/comp130/12spring/pca/pca_docs.shtml](https://www.clear.rice.edu/comp130/12spring/pca/pca_docs.shtml)) we just need to plot the first 2 columns if we are interested in projecting our 3-dimensional input dataset onto a 2-dimensional subspace."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PC axes in terms of the measurement axes scaled by the standard deviations:\n",
      " [[-0.5687065  -0.53470094 -0.62503425]\n",
      " [ 0.62397375 -0.7755595   0.09572991]\n",
      " [ 0.53593812  0.33556274 -0.77470509]]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\ntr42bAjDN5V6vnXOtHoiKsjrdlAyEmkBS5eGEtGYov5Bx4wJw5csiROXSIGSkUgLWNtPn5/r1tUn\njkbR0wMLF8L8+eFvrUqGX/nKV7jssssym9/pp5/OLrvswoQJEzKbZ6PQPSORFjB6dN/jd9qpPnE0\ngjzfO5sxYwZnnXUWp512Wv8T54xKRiItoLMznHC7i7o36+4Owzs748RVb7W+d/aDH/yASZMmMXny\nZE499dRe46699lre/e53M3nyZE466SRee+01AG699VYmTJjA5MmTmT59OgCLFy/mwAMPZMqUKUya\nNIknnggdAU+fPp3R/V1Z5JSSkUgLGDo0XPm3tcGyZVtfbW1heDM0765ELe+dLV68mJkzZzJv3jwe\neeQRLr/88l7jTzzxRB544AEeeeQROjs7uf766wG4+OKLueuuu3jkkUeYO3cuAFdddRVnn302Dz/8\nMAsWLGDcuHEDDywnWuQQFJGxY+HSS8MJed26UDXXLL8zqlQt753NmzePj3zkI4xJMl1xCWbRokV8\n6Utf4sUXX+TVV1/lfe97HwCHHnooM2bM4KMf/SgnnngiAAcffDBf+9rX6Orq4sQTT2SfffYZeGA5\noZKRSAsZNgwmToTp08PfVkpEEPfe2YwZM7jiiitYuHAhF1100ZanRVx11VXMnDmTFStWcMABB7Bm\nzRr++q//mrlz59LW1sZxxx3HvHnzahdYg1AyEpGWUct7Z0ceeSS33nora9asAWBtUTHslVdeYffd\nd6enp4fZs2dvGf7UU08xbdo0Lr74Ytrb21mxYgVPP/00b3vb2/jsZz/LCSecwKOPPjrwwHJCyUhE\nWkYt753tv//+XHjhhRx22GFMnjyZc889t9f4Sy65hGnTpnHooYfyzne+c8vwCy64gIkTJzJhwgQO\nOeQQJk+ezC233MKECROYMmUKixYt2tJ67pRTTuHggw/m8ccfZ9y4cVvuOzUDc/fYMVRl6tSprs71\nRCRtyZIldFZRrCk8o69Z752V2h5m9qC7T40UUr+aaPOLiFSmcO9MGoeq6UREJDolIxERiS5qMjKz\nPczs12b2mJktNrOzY8YjIiJxxL5ntAk4z90fMrMRwINmdre7PxY5LhERqaOoJSN3X+XuDyX/vwIs\nARr8UYUiIpK1hrlnZGYdwF8Avy8x7kwzW2BmC/LYg6GItKYsu5BYsWIFRxxxBPvttx/777//m559\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110781400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib.mlab import PCA as mlabPCA\n",
    " \n",
    "mlab_pca = mlabPCA(all_samples.T) \n",
    "\n",
    "print('PC axes in terms of the measurement axes scaled by the standard deviations:\\n', mlab_pca.Wt)\n",
    "\n",
    "plt.plot(mlab_pca.Y[0:20, 0],mlab_pca.Y[0:20, 1], 'o', \n",
    "         markersize=7, color='blue', alpha=0.5, label='class1')\n",
    "plt.plot(mlab_pca.Y[20:40, 0], mlab_pca.Y[20:40, 1], '^', \n",
    "         markersize=7, color='red', alpha=0.5, label='class2')\n",
    "\n",
    "plt.xlabel('x_values')\n",
    "plt.ylabel('y_values')\n",
    "plt.legend()\n",
    "plt.title('Transformed samples with class labels from matplotlib.mlab.PCA()')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name=\"_diff_mat_pca\"></a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## Differences between the step by step approach and matplotlib.mlab.PCA()\n",
    "\n",
    "When we plot the transformed dataset onto the new 2-dimensional subspace, we observe that the scatter plots from our step by step approach and the `matplotlib.mlab.PCA()` class do not look identical. This is due to the fact that `matplotlib.mlab.PCA()` class ***scales the variables to unit variance*** prior to calculating the covariance matrices. This will/could eventually lead to different variances along the axes and affect the contribution of the variable to principal components. \n",
    "\n",
    "One example where a scaling would make sense would be if one variable was measured in the unit **inches** where the other variable was measured in **cm**.  \n",
    "However, for our hypothetical example, we assume that both variables have the same (arbitrary) unit, so that we skipped the step of scaling the input data."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<br>\n",
    "<br>\n",
    "<a name=\"sklearn_pca\"> </a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# Using the PCA() class from the sklearn.decomposition library to confirm our results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In order to make sure that we have not made a mistake in our step by step approach, we will use another library that doesn't rescale the input data by default.  \n",
    "Here, we will use the PCA class from the `scikit-learn` machine-learning library. The documentation can be found here:  \n",
    "[http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html](http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html).  \n",
    "\n",
    "For our convenience, we can directly specify to how many components we want to reduce our input dataset via the `n_components` parameter. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "    n_components : int, None or string\n",
    "    \n",
    "    Number of components to keep. if n_components is not set all components are kept:\n",
    "        n_components == min(n_samples, n_features)\n",
    "        if n_components == ‘mle’, Minka’s MLE is used to guess the dimension if 0 < n_components < 1, \n",
    "        select the number of components such that the amount of variance that needs to be explained \n",
    "        is greater than the percentage specified by n_components"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we just need to use the `.fit_transform()` in order to perform the dimensionality reduction."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110898198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.decomposition import PCA as sklearnPCA\n",
    "\n",
    "sklearn_pca = sklearnPCA(n_components=2)\n",
    "sklearn_transf = sklearn_pca.fit_transform(all_samples.T)\n",
    "\n",
    "plt.plot(sklearn_transf[0:20, 0],sklearn_transf[0:20, 1], \n",
    "         'o', markersize=7, color='blue', alpha=0.5, label='class1')\n",
    "plt.plot(sklearn_transf[20:40, 0], sklearn_transf[20:40, 1], \n",
    "         '^', markersize=7, color='red', alpha=0.5, label='class2')\n",
    "\n",
    "plt.xlabel('x_values')\n",
    "plt.ylabel('y_values')\n",
    "\n",
    "plt.legend()\n",
    "plt.title('Transformed samples with class labels from matplotlib.mlab.PCA()')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Depending on your computing environmnent, you may find that the plot above is the exact mirror image of the plot from out step by step approach. This is due to the fact that the signs of the eigenvectors can be either positive or negative, since the eigenvectors are scaled to the unit length 1, both we can simply multiply the transformed data by $\\times(-1)$ to revert the mirror image.\n",
    "\n",
    "Please note that this is not an issue: If $v$ is an eigenvector of a matrix $\\Sigma$, we have,\n",
    "\n",
    "$$\\Sigma v = \\lambda v,$$\n",
    "\n",
    "where $\\lambda$ is our eigenvalue. Then $-v$ is also an eigenvector that has the same eigenvalue, since\n",
    "\n",
    "$$\\Sigma(-v) = -\\Sigma v = -\\lambda v = \\lambda(-v).$$\n",
    "\n",
    "Also, see the note in the scikit-learn documentation:\n",
    "\n",
    "> Due to implementation subtleties of the Singular Value Decomposition (SVD), which is used in this implementation, running fit twice on the same matrix can lead to principal components with signs flipped (change in direction). For this reason, it is important to always use the same estimator object to transform data in a consistent fashion.\n",
    "\n",
    "(http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1106b2c88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11082ca58>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# sklearn.decomposition.PCA\n",
    "\n",
    "sklearn_transf *= (-1) \n",
    "\n",
    "plt.plot(sklearn_transf[0:20, 0], sklearn_transf[0:20, 1] , 'o', \n",
    "         markersize=7, color='blue', alpha=0.5, label='class1')\n",
    "plt.plot(sklearn_transf[20:40, 0], sklearn_transf[20:40, 1] , '^',\n",
    "         markersize=7, color='red', alpha=0.5, label='class2')\n",
    "plt.xlabel('x_values')\n",
    "plt.ylabel('y_values')\n",
    "plt.legend()\n",
    "plt.title('Transformed samples via sklearn.decomposition.PCA')\n",
    "plt.show()\n",
    "\n",
    "# step by step PCA\n",
    "plt.plot(transformed[0, 0:20], transformed[1, 0:20], \n",
    "         'o', markersize=7, color='blue', alpha=0.5, label='class1')\n",
    "plt.plot(transformed[0, 20:40], transformed[1, 20:40], \n",
    "         '^', markersize=7, color='red', alpha=0.5, label='class2')\n",
    "\n",
    "plt.xlabel('x_values')\n",
    "plt.ylabel('y_values')\n",
    "plt.legend()\n",
    "plt.title('Transformed samples step by step approach')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1107827b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10ff14d68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# sklearn.decomposition.PCA\n",
    "\n",
    "sklearn_transf *= (-1) \n",
    "\n",
    "plt.plot(sklearn_transf[0:20, 0], sklearn_transf[0:20, 1] , 'o', \n",
    "         markersize=7, color='blue', alpha=0.5, label='class1')\n",
    "plt.plot(sklearn_transf[20:40, 0], sklearn_transf[20:40, 1] , '^',\n",
    "         markersize=7, color='red', alpha=0.5, label='class2')\n",
    "plt.xlabel('x_values')\n",
    "plt.ylabel('y_values')\n",
    "plt.legend()\n",
    "plt.title('Transformed samples via sklearn.decomposition.PCA')\n",
    "plt.show()\n",
    "\n",
    "# step by step PCA\n",
    "\n",
    "transformed = matrix_w.T.dot(all_samples - mean_vector)\n",
    "\n",
    "plt.plot(transformed[0, 0:20], transformed[1, 0:20], \n",
    "         'o', markersize=7, color='blue', alpha=0.5, label='class1')\n",
    "plt.plot(transformed[0, 20:40], transformed[1, 20:40], \n",
    "         '^', markersize=7, color='red', alpha=0.5, label='class2')\n",
    "\n",
    "plt.xlabel('x_values')\n",
    "plt.ylabel('y_values')\n",
    "plt.legend()\n",
    "plt.title('Transformed samples step by step approach, subtracting mean vectors')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
